package com.example.work.controller;
import com.example.work.entity.DbUser;
import com.example.work.service.IUserService;
import com.example.work.utils.TokenUtils;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.example.work.utils.TokenUtils;
//TODO 全是假数据
@RestController
@RequestMapping("/auth")
public class LoginController {

    // 定义密钥（使用安全的生成方式）
    private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    private static final String ISSUER = "Soybean";
    @Autowired
    private IUserService userService;
    // 登录接口
    @PostMapping("/login")
    public Map<String, Object> login(@RequestBody Map<String, String> loginRequest) {
        String userName = loginRequest.get("userName");
        String password = loginRequest.get("password");

        // 打印用户名和密码
        System.out.println("接收到的用户名: " + userName);
        System.out.println("接收到的密码: " + password);
        DbUser user=userService.getUserByUsername(userName);
        if(user==null){
            // 验证失败
            Map<String, Object> response = new HashMap<>();
            response.put("code", "1001");
            response.put("msg", "用户名或密码错误");
            return response;
        }
        else {
            // 验证成功，生成 token 和 refreshToken
            String token = TokenUtils.generateToken(user.getUserName(), 3600000); // 1小时有效期
            String refreshToken = TokenUtils.generateToken(user.getUserName(), 604800000); // 7天有效期
            // 构造返回数据
            Map<String, Object> data = new HashMap<>();
            data.put("token", token);
            data.put("refreshToken", refreshToken);
            Map<String, Object> response = new HashMap<>();
            response.put("data", data);
            response.put("code", "0000");
            response.put("msg", "请求成功");
            return response;
        }
    }

    @GetMapping("/getUserInfo")
    public Map<String, Object> getUserInfo(@RequestHeader("Authorization") String authorizationHeader) {
        // 模拟根据 token 获取用户名（实际情况中，可能需要解密或查询数据库）
        String userName = TokenUtils.getUserNameFromToken(authorizationHeader);
        DbUser user=userService.getUserByUsername(userName);
        // 构造用户数据
        System.out.println(userName);
        Map<String, Object> userData = new HashMap<>();
        userData.put("userId", user.getId());
        userData.put("userName", user.getUserName());
        // 打印解析的用户名和密码
        System.out.println("解析的用户名: " + user.getId());
        // 根据用户名返回不同的角色
        // 根据 roleId 返回不同的 roles
        if ("1".equals(user.getRoleId())) {
            userData.put("roles", Arrays.asList("R_SUPER")); // 角色 1 -> 管理员
        } else if ("2".equals(user.getRoleId())) {
            userData.put("roles", Arrays.asList("R_ADMIN")); // 角色 2 -> 普通用户
        } else if ("3".equals(user.getRoleId())) {
            userData.put("roles", Arrays.asList("R_USER")); // 角色 3 -> 超级用户
        } else {
            userData.put("roles", Arrays.asList("R_USER")); // 默认角色
        }
        userData.put("buttons", Arrays.asList("B_CODE1", "B_CODE2", "B_CODE3"));

        // 构造响应数据
        Map<String, Object> response = new HashMap<>();
        response.put("data", userData);
        response.put("code", "0000");
        response.put("msg", "请求成功");
        return response;
    }
}